package cn.com.dcsgo.service.impl;

import cn.com.dcsgo.domain.vo.MenuVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.com.dcsgo.domain.po.Menu;
import cn.com.dcsgo.service.MenuService;
import cn.com.dcsgo.mapper.MenuMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 针对表【menu(页面表(页面间的层级关系))】的数据库操作Service实现
 *
 * @author Dcsgo
 * @since 2025-05-13 16:33:47
 */
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu>
        implements MenuService {

    @Override
    public List<MenuVo> getSidebar() {
        List<Menu> menuList = list();
        return build(menuList, 0L);
    }

    /**
     * 递归构建侧边栏层级结构
     *
     * @param menus 所有页面
     * @param pid   当前构建页面的父id
     * @return 构建好的页面列表
     */
    private List<MenuVo> build(List<Menu> menus, Long pid) {
        //创建集合对象保存返回值
        List<MenuVo> result = new ArrayList<>();
        //遍历menus集合获得每个菜单节点对象，m每个菜单节点对象
        for (Menu m : menus) {
            //m菜单节点对象的父节点id，是否和传入id相等，如果相等说明当前遍历的节点m，是pid对应的菜单节点的子节点
            if (m.getPid().equals(pid)) {

                MenuVo menusVo = new MenuVo();
                BeanUtils.copyProperties(m, menusVo);
                //进行递归遍历
                menusVo.setSubMenus(build(menus, m.getId()));
                result.add(menusVo);
            }
        }
        return result;
    }
}




